/**
 * 将时间戳转换为指定格式的时间字符串
 * @param {number} timestamp - 时间戳（毫秒级，秒级需要 *1000）
 * @param {string} format - 格式化字符串，如 "YYYY-MM-DD HH:mm:ss"
 * @returns {string} 格式化后的时间字符串
 */
function formatTimestamp(timestamp, format = "YYYY-MM-DD HH:mm:ss") {
  // 创建 Date 对象
  const date = new Date(timestamp);

  // 获取各部分时间，补零保证两位数
  const map = {
    YYYY: date.getFullYear(),
    MM: String(date.getMonth() + 1).padStart(2, "0"), // 月份从0开始
    DD: String(date.getDate()).padStart(2, "0"),
    HH: String(date.getHours()).padStart(2, "0"),
    mm: String(date.getMinutes()).padStart(2, "0"),
    ss: String(date.getSeconds()).padStart(2, "0")
  };

  // 替换格式字符串里的标记
  return format.replace(/YYYY|MM|DD|HH|mm|ss/g, (match) => map[match]);
}




/**
 * 根据传入的时间戳，计算相对时间（多久以前）
 * - < 5秒  => "刚刚"
 * - < 1分钟 => "xx秒钟前"
 * - < 1小时 => "xx分钟前"
 * - < 1天   => "xx小时前"
 * - < 1个月 => "xx天前"（按30天算）
 * - < 3个月 => "xx个月前"
 * - >= 3个月 => null
 * 
 * @param {number} timestamp - 时间戳（支持秒级10位 或 毫秒级13位）
 * @returns {string|null} 相对时间字符串 或 null
 */
export function timeAgo(timestamp) {
	
  // 如果是秒级时间戳（10位），转换为毫秒
  if (timestamp.toString().length === 10) {
    timestamp *= 1000;
  }
	
  const now = Date.now();      // 当前时间（毫秒）
  const diffMs = now - timestamp; // 时间差（毫秒）

  if (diffMs < 0) {
    // 未来时间不处理，直接返回 null
    return null;
  }

  // 将时间差换算为不同的单位
  const seconds = Math.floor(diffMs / 1000);       // 秒
  const minutes = Math.floor(diffMs / 1000 / 60);  // 分钟
  const hours = Math.floor(diffMs / 1000 / 60 / 60); // 小时
  const days = Math.floor(diffMs / 1000 / 60 / 60 / 24); // 天
  const months = Math.floor(days / 30);            // 月（按30天算）
  const years = Math.floor(months / 12);            // 年

  // 判断范围，依次返回对应格式
  if (seconds < 5) {
    return "刚刚";
  } else if (seconds < 60) {
    return `${seconds}秒钟前`;
  } else if (minutes < 60) {
    return `${minutes}分钟前`;
  } else if (hours < 24) {
    return `${hours}小时前`;
  } else if (days < 30) {
    return `${days}天前`;
  } else if (months < 12) {
    return `${months}个月前`;
  } else{
    return `${years}年前`;
  }
}
/*
// ================== 测试用例 ==================

// 毫秒级时间戳测试
console.log(timeAgo(Date.now() - 3 * 1000));            // "刚刚"
console.log(timeAgo(Date.now() - 20 * 1000));           // "20秒钟前"
console.log(timeAgo(Date.now() - 5 * 60 * 1000));       // "5分钟前"
console.log(timeAgo(Date.now() - 2 * 60 * 60 * 1000));  // "2小时前"
console.log(timeAgo(Date.now() - 10 * 24 * 60 * 60 * 1000)); // "10天前"
console.log(timeAgo(Date.now() - 2 * 30 * 24 * 60 * 60 * 1000)); // "2个月前"
console.log(timeAgo(Date.now() - 100 * 24 * 60 * 60 * 1000)); // null

// 秒级时间戳测试（10位）
const nowSec = Math.floor(Date.now() / 1000);
console.log(timeAgo(nowSec - 2));       // "刚刚"
console.log(timeAgo(nowSec - 45));      // "45秒钟前"
console.log(timeAgo(nowSec - 1800));    // "30分钟前"
console.log(timeAgo(nowSec - 7200));    // "2小时前"
console.log(timeAgo(nowSec - 86400));   // "1天前"
console.log(timeAgo(nowSec - 60 * 60 * 24 * 40)); // "1个月前"
console.log(timeAgo(nowSec - 60 * 60 * 24 * 120)); // null
*/
